export function get_coords() {
  return new Promise(function (resolve, reject) {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function (pos) {
        // 成功回调函数，接受一个地理位置的对象作为参数。
        // https://developer.mozilla.org/cn/docs/Web/API/Position 参数说明
        resolve(pos.coords)
      }, function (err) {
        console.error(err)
        reject(err)
        // 错误的回调
        // https://developer.mozilla.org/cn/docs/Web/API/PositionError 错误参数
      }, {
        enableHighAccuracy: true, // 是否获取高精度结果
        timeout: 5000, //超时,毫秒
        maximumAge: 0 //可以接受多少毫秒的缓存位置
        // 详细说明 https://developer.mozilla.org/cn/docs/Web/API/PositionOptions
      });
    } else {
      alert('抱歉！您的浏览器无法使用地位功能');
      reject('抱歉！您的浏览器无法使用地位功能')
    }
  })
}

//经纬度算两点距离
function getShortDistance(lon1, lat1, lon2, lat2) {
  var DEF_PI = Math.PI; // PI
  var DEF_2PI = Math.PI * 2; // 2*PI
  var DEF_PI180 = Math.PI / 180; // PI/180.0
  var DEF_R = 6370693.5; // radius of earth

  var ew1, ns1, ew2, ns2;
  var dx, dy, dew;
  var distance;
  // 角度转换为弧度
  ew1 = lon1 * DEF_PI180;
  ns1 = lat1 * DEF_PI180;
  ew2 = lon2 * DEF_PI180;
  ns2 = lat2 * DEF_PI180;
  // 经度差
  dew = ew1 - ew2;
  // 若跨东经和西经180 度，进行调整
  if (dew > DEF_PI)
    dew = DEF_2PI - dew;
  else if (dew < -DEF_PI)
    dew = DEF_2PI + dew;
  dx = DEF_R * Math.cos(ns1) * dew; // 东西方向长度(在纬度圈上的投影长度)
  dy = DEF_R * (ns1 - ns2); // 南北方向长度(在经度圈上的投影长度)
  // 勾股定理求斜边长
  distance = Math.sqrt(dx * dx + dy * dy).toFixed(0);
  return distance;
}


/*
* 返回距离目标最近位置坐标, 并计算设置距离目标位置距离
*
* @param { object } 目标坐标(原点)
* @param { obj } 目标坐标2
* @returns  object
* */
export function get_nearly(coords, item) {
  if (Object.keys(coords).length == 0) return {...item, dist: '-'}
  const {pow, sqrt, round} = Math
  const dist = e => getShortDistance(parseFloat(coords.longitude), parseFloat(coords.latitude), parseFloat(e.longitude), parseFloat(e.latitude))
  item.dist = dist(item)
  return item
}

// 长度单位过滤器
export function meter2kilometre(v) {
  if (v == '-') return v
  v = parseFloat(v)
  if (isNaN(v)) {
    return ''
  } else if (v < 1000) {
    return v.toFixed(2) + '米'
  }
  return (v / 1000).toFixed(2) + '公里'
}
